package com.bw.ae.nexus.service;

import com.bw.ae.nexus.Exceptions.*;
import com.bw.ae.nexus.domain.User;

import java.io.IOException;

/**
 * Created by Xiaosiyuan on 2016/8/23.
 */
public interface NexusFunction {

    /**
     * 创建repository
     * @param projectLabel 项目标识
     */
    public void createRepo(String projectLabel) throws RepositoryCreateException;

    /**
     *  添加roles
     * @param projectLabel 项目标识
     */
    public void addRoles(String projectLabel) throws RoleAddException;

    /**
     * 添加用户
     * @param user 用户信息
     */
    public void addUser(User user) throws UserAddException;

    /**
     * 更新ae-public组
     * @param projectLabel 项目标识
     */
    public void updateRepo(String projectLabel) throws RepositoryUpdateException;

    /**
     *  更新用户roles
     * @param user 用户信息
     * @param projectLabel 项目标识
     */
    public void updateUser(User user,String projectLabel) throws UserGrantException;

    /**
     * 更新用户roles，若不存在，则添加该用户
     * @param user 用户信息
     * @param projectLabel 项目标识
     */
    public void updateOrAddUser(User user,String projectLabel) throws Exception;

    /**
     * 修改用户的密码
     * @param userId 用户id
     * @param oldPassword 原密码
     * @param newPassword 新密码
     */
    public void changePassword(String userId,String oldPassword,String newPassword) throws PasswordChangeException;

    /**
     * 修改用户密码
     * @param userId 用户id
     * @param password 新密码
     * @return true 修改成功 false 修改失败
     */
    public void changePassword(String userId,String password) throws PasswordChangeException;

    /**
     * 删除用户
     * @param userId 用户id
     * @return true 修改成功 false 修改失败
     */
    public void deleteUser(String userId) throws Exception;
    /**
     * 取消用户授权
     * @param userId 用户id
     * @param projectLabel 项目标识
     */
    public void ungrantUser(String userId,String projectLabel) throws UserUnGrantException;

    /**
     *  删除role
     * @param projectLabel 项目标识
     */
    public void deleteRole(String projectLabel);

    /**
     * 删除repository
     * @param projectLabel 项目标识
     */
    public void deleteRepository(String projectLabel);
    /**
     *  激活用户
     * @param userId 用户id
     * @throws IOException 
     */
    public void activeUser(String userId) throws IOException;
    /**
     * 用户禁用
     * @param userId 用户id
     * @throws IOException 
     */
    public void disableUser(String userId) throws IOException;

}
